package com.feiyang.ni;

import javax.swing.*;
import java.awt.event.*;

public class LoginJFrame extends JFrame implements ActionListener, MouseListener {
    // 与登录相关的所有逻辑都写在这个类里面
    // 设置监听
    // 登录按钮
    JButton login = new JButton(new ImageIcon("image\\login\\登录按钮.png"));
    // 注册按钮
    JButton register = new JButton(new ImageIcon("image\\login\\注册按钮.png"));
    // 登录按钮按下状态图片
    private ImageIcon loginPressedIcon = new ImageIcon("image\\login\\登录按下.png");
    // 注册按钮按下状态图片
    private ImageIcon registerPressedIcon = new ImageIcon("image\\login\\注册按下.png");
    // 登录按钮初始图片
    private ImageIcon loginNormalIcon = new ImageIcon("image\\login\\登录按钮.png");
    // 注册按钮初始图片
    private ImageIcon registerNormalIcon = new ImageIcon("image\\login\\注册按钮.png");
    //设置初始的用户信息
    private String userName = "Player";
    private String passWord = "123456";
    //初始明文和密码块
    // 用户名明文框
    JTextField username;
    // 密码框
    JPasswordField password;
    // 验证码
    private String oldCode = CodeUtil.getCode();
    JTextField codeLabel;
    JLabel code;

    public LoginJFrame() {
        // 初始化窗口
        initJFrame();
        // 初始化图片
        initImagine();
    }
    private void RefreshCode() {
        String newCode = CodeUtil.getCode();
        if (!newCode.equals(oldCode)) {
            code.setText(newCode);
        }
    }
    private void initJFrame() {
        this.setSize(488, 430);
        this.setTitle("拼图 登录");
        // 设置窗口置顶
        this.setAlwaysOnTop(true);
        // 设置窗口居中
        this.setLocationRelativeTo(null);
        // 设置关闭模式
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        // 取消默认居中的 layout
        this.setLayout(null);
        // 显示（建议放在最后）
        this.setVisible(true);
    }

    public void initImagine() {
        // 初始化图片
        // 先清空窗口
        this.getContentPane().removeAll();
        // 用户名图片
        JLabel jLabel1 = new JLabel(new ImageIcon("image\\login\\用户名.png"));
        jLabel1.setBounds(116, 135, 51, 19);
        this.getContentPane().add(jLabel1);
        // 用户名明文框
        username = new JTextField();
        username.setBounds(195, 134, 200, 30);
        this.getContentPane().add(username);
        // 密码图片
        JLabel jLabel2 = new JLabel(new ImageIcon("image\\login\\密码.png"));
        jLabel2.setBounds(130, 195, 35, 18);
        this.getContentPane().add(jLabel2);
        // 密码框
        password = new JPasswordField();
        password.setBounds(195, 195, 200, 30);
        this.getContentPane().add(password);
        // 验证码图片
        JLabel jLabel3 = new JLabel(new ImageIcon("image\\login\\验证码.png"));
        jLabel3.setBounds(116, 255, 51, 19);
        this.getContentPane().add(jLabel3);
        // 验证码框
        codeLabel = new JTextField();
        codeLabel.setBounds(195, 255, 100, 30);
        this.getContentPane().add(codeLabel);
        // 随机验证码

        code = new JLabel(oldCode);
        code.setBounds(305, 255, 100, 30);
        this.getContentPane().add(code);
        //变光标
        code.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR));
        // 验证码刷新按钮
        code.addMouseListener(this);
        // 登录按钮设置
        login.setBounds(133, 300, 90, 40);
        // 移除按钮默认边框
        login.setBorderPainted(false);
        // 移除按钮默认背景
        login.setContentAreaFilled(false);
        this.getContentPane().add(login);
        login.addMouseListener(this);
        // 注册按钮设置
        register.setBounds(256, 300, 90, 40);
        // 移除按钮默认边框
        register.setBorderPainted(false);
        // 移除按钮默认背景
        register.setContentAreaFilled(false);
        this.getContentPane().add(register);
        register.addMouseListener(this);
        // 背景图片
        JLabel background = new JLabel(new ImageIcon("image\\login\\background.png"));
        background.setBounds(0, 0, 470, 390);
        this.getContentPane().add(background);
        //刷新界面
        this.getContentPane().repaint();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // 若还有其他动作监听逻辑可保留

    }

    @Override
    public void mouseClicked(MouseEvent e) {
        Object obj = e.getSource();
        if (obj == code) {
            // 刷新验证码
            RefreshCode();
        }
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // 检查鼠标点击的是哪个按钮
        System.out.println("鼠标按下");
        if (e.getSource() == login) {
            // 更改登录按钮的图标为按下状态
            login.setIcon(loginPressedIcon);
        } else if (e.getSource() == register) {
            // 更改注册按钮的图标为按下状态
            register.setIcon(registerPressedIcon);
        }
    }

    @Override
    public void mouseReleased(MouseEvent e) {
        // 检查鼠标释放的是哪个按钮
        System.out.println("鼠标释放");
        if (e.getSource() == login) {
            // 更改登录按钮的图标为正常状态
            login.setIcon(loginNormalIcon);
            // 获取用户名和密码
            String user_name = username.getText();
            String pass_word = new String(password.getPassword());
            // 获取验证码
            String code_text = codeLabel.getText();
            // 检查用户名和密码是否正确
            if (user_name.equals(userName) && pass_word.equals(passWord) && code_text.equals(code.getText())) {
                // 登录成功，关闭当前窗口，打开游戏窗口
                this.setVisible(false);
                new GameJFrame();
            } else if (!code_text.equals(code.getText())) {
                // 登录失败，弹出错误提示框
                JDialog jDialog = new JDialog();
                JLabel jLabel = new JLabel("验证码错误，请重新输入");
                //设置弹窗的布局
                jDialog.setLayout(new java.awt.FlowLayout());
                //设置弹窗的大小
                jDialog.setSize(300, 150);
                //添加组件
                jDialog.getContentPane().add(jLabel);
                //设置弹窗的标题
                jDialog.setTitle("验证码错误");
                //设置弹窗置顶
                jDialog.setAlwaysOnTop(true);
                //设置弹窗居中
                jDialog.setLocationRelativeTo(null);
                //设置弹窗关闭模式
                jDialog.setModal(true);
                //出现弹窗
                jDialog.setVisible(true);
                //刷新验证码
                RefreshCode();
                //清空验证码框
                codeLabel.setText("");
            }else if(user_name.equals("") || pass_word.equals("")){
                JDialog jDialog = new JDialog();
                JLabel jLabel = new JLabel("用户名或密码不能为空");
                jDialog.setLayout(new java.awt.FlowLayout());
                //设置弹窗的大小
                jDialog.setSize(300, 150);
                //添加组件
                jDialog.getContentPane().add(jLabel);
                //设置弹窗的标题
                jDialog.setTitle("用户名或密码不能为空");
                //设置弹窗置顶
                jDialog.setAlwaysOnTop(true);
                //设置弹窗居中
                jDialog.setLocationRelativeTo(null);
                //设置弹窗关闭模式
                jDialog.setModal(true);
                //出现弹窗
                jDialog.setVisible(true);
                //刷新验证码
                RefreshCode();
                //清空验证码框
                codeLabel.setText("");
            } else if(!user_name.equals(userName) || !pass_word.equals(passWord)){
                JDialog jDialog = new JDialog();
                JLabel jLabel = new JLabel("用户名或密码错误，请重新输入");
                //设置弹窗的布局
                jDialog.setLayout(new java.awt.FlowLayout());
                //设置弹窗的大小
                jDialog.setSize(300, 150);
                //添加组件
                jDialog.getContentPane().add(jLabel);
                //设置弹窗的标题
                jDialog.setTitle("用户名或密码错误");
                //设置弹窗置顶
                jDialog.setAlwaysOnTop(true);
                //设置弹窗居中
                jDialog.setLocationRelativeTo(null);
                //设置弹窗关闭模式
                jDialog.setModal(true);
                //出现弹窗
                jDialog.setVisible(true);
                //刷新验证码
                RefreshCode();
                //清空验证码框
                codeLabel.setText("");
            }
        } else if (e.getSource() == register) {
            //警告
            JDialog jDialog = new JDialog();
            JLabel jLabel = new JLabel("注册页面还未开发...");
            //设置弹窗的布局
            jDialog.setLayout(new java.awt.FlowLayout());
            //设置弹窗的大小
            jDialog.setSize(300, 150);
            //添加组件
            jDialog.getContentPane().add(jLabel);
            //设置弹窗的标题
            jDialog.setTitle("注册页面还未开发...");
            //设置弹窗置顶
            jDialog.setAlwaysOnTop(true);
            //设置弹窗居中
            jDialog.setLocationRelativeTo(null);
            //设置弹窗关闭模式
            jDialog.setModal(true);
            //出现弹窗
            jDialog.setVisible(true);
            // 更改注册按钮的图标为正常状态
            register.setIcon(registerNormalIcon);
        }
    }

    @Override
    public void mouseEntered(MouseEvent e) {
    }

    @Override
    public void mouseExited(MouseEvent e) {
    }
}